package com.ilxqx.framework.generator.key;

import com.ilxqx.framework.generator.enumeration.ConstraintKeyEnum;
import com.ilxqx.framework.generator.parser.TableField;

import java.util.List;

/**
 * 限制键
 * @author venus
 */
public interface ConstraintKey {

    /**
     * 获取键的名称
     * @return 键名称
     */
    String getKeyName();

    /**
     * 判断是否是复合键
     * @return bool
     */
    boolean isComposite();

    /**
     * 返回键的类型
     * @return 键类型
     */
    ConstraintKeyEnum getKeyType();

    /**
     * 获取参与键构成的第一个字段
     * @return 表字段对象
     */
    KeyMember getFirstFieldMember();

    /**
     * 获取该键的所有构成字段
     * @return 表字段List
     */
    List<KeyMember> getFields();

    /**
     * key组成成员
     */
    interface KeyMember {

        /**
         * 获取表字段
         * @return 表字段对象
         */
        TableField getField();

        /**
         * 获取该字段在键中的索引（序号）
         * @return 索引
         */
        int getSeq();

    }

}